Пульт.Онлайн /

Создание тревожных переменных

Тревожные переменные в Пульт.Онлайн — это механизм мониторинга критических событий в SCADA-системе. Они позволяют отслеживать нарушения заданных условий работы оборудования или параметров и оперативно реагировать на них. Тревожные переменные в Пульт.Онлайн предоставляют гибкий инструмент для мониторинга критических событий и оперативного реагирования.

Основные понятия

Тревожная переменная — специальный тип переменной, которая отслеживает значения других переменных и изменяет свой статус при выполнении заданных условий. Тревоги создаются в прототипах, а при сборке проекта для каждого узла создается соответствующий набор тревожных переменных.

Классы тревог:

  • Авария — критические нарушения, требующие немедленного вмешательства
  • Неисправность — серьезные отклонения от нормальной работы
  • Предупреждение — потенциально опасные ситуации
  • Оповещение — информационные сообщения

События тревоги:

  • Активация — срабатывание тревоги
  • Нормализация — возврат к нормальному состоянию
  • Квитирование — подтверждение оператором
  • Отмена квитирования — сброс подтверждения
  • Блокировка — временное отключение мониторинга
  • Разблокировка — восстановление мониторинга

Создание тревожной переменной

1. Создание в прототипе

Тревожные переменные создаются в прототипах на вкладке ALARM:

  1. Откройте прототип в редакторе
  2. Перейдите на вкладку ALARM
  3. Добавьте переменную (кнопка [+] Переменная)
  4. Заполните значимые свойства переменной

2. Настройка свойств тревоги

Основные свойства тревожной переменной:

Сигнал — математическое выражение, в простейшем случае - имя переменной, значение которой отслеживается.

  • Введите имя отслеживаемой переменной со знаком $ - $var_name

  • При необходимости, используйте несколько переменных, математические выражения и функции, например:

      $temperature > 100 && bit($status,8)==0
    
  • Используйте локальные имена переменных для переменных этого прототипа ($temperature), проектные имена для переменных других узлов проекта ($N1_temperature) и глобальные имена для переменных из других проектов, размещенных на сервере ($P1_N1_temperature).

Обратите внимание! Имена переменных необходимо указывать со знаком $

  • Можно отслеживать любые переменные - физические, виртуальные и другие тревожные переменные

Условие — условие для активации тревоги:

  • !=0, ==0 - сравнение рассчитанного выражения из поля Сигнал с нулем
  • >, <, >=, <=, ==, != - сравнение рассчитанного выражения из поля Сигнал с выражением в поле Уставка.
  • Отклонение - Сигнал больше или меньше Уставки на величину, заданную в поле Отклонение
  • Скорость изменения - ROC (Rate of Change), величины изменения Сигнала за указанный Период больше Уставки

Уставка — как и в поле Сигнал допускается использование выражений. В простейшем случае - число, с которым будет выполняться сравнение Сигнала по Условию.

Задержка — время (в секундах), в течение которого условие должно сохраняться перед активацией тревоги. Позволяет избежать ложных срабатываний при кратковременных скачках отслеживаемых сигналов. При этом, Задержка не применяется к нормализации тревоги (тревога всегда переходит в состояние Норма без задержки). В качестве значения параметра может использоваться выражение.

Мертвая зона — гистерезис, нормализация тревоги будет происходить только если разница между значением Сигнала и Уставкой сравняется или превысит по модулю значение мертвой зоны. В качестве значения параметра может использоваться выражение. Например, если условие активации тревоги Сигнал >= 20, при значении Сигнала, равным 20, произойдет активация тревоги. Если при этом задана мертвая зона, равная, например 3, то нормализация тревоги произойдет только при уменьшении значения Сигнала до 17.

Класс — определяет серьезность события:

  • Авария, Неисправность, Предупреждение, Оповещение
  • Влияет на цветовое оформление и приоритет уведомлений

Квитирование — если параметр включен, тревога будет заведена как квитируемая. Квитируемые тревоги остаются в списке актуальных тревог даже после нормализации, до подтверждения (квитирования) оператором. Неквитируемые тревоги автоматически убираются из списка актуальных тревог после нормализации и не требуют подтверждения.

Описание — краткое понятное название тревоги, которое будет отображаться в интерфейсе:

  • Пример: "Перегрев двигателя", "Низкое давление", "Обрыв связи"

3. Пример настройки

Рассмотрим создание тревоги для контроля температуры двигателя:

  1. Имя тревожной переменной: motor_overheat
  2. Сигнал: $motor_temperature / 10 (нормализуем значение, если требуется)
  3. Условие: >
  4. Уставка: $motor_temperature_high_limit (используем переменную для динамического задания порога аварии)
  5. Задержка активации: 3 (секунды)
  6. Класс: Авария
  7. Квитирование: вкл
  8. Описание: "Перегрев двигателя"

Настройка уведомлений по тревогам

1. Шаблоны уведомлений

Пульт.Онлайн использует шаблоны для форматирования уведомлений. По умолчанию тревожные переменные используют шаблон default_alarm.ntf. Шаблоны уведомлений редактируются в разделе Редактор / Проект / Уведомления.

2. Формат уведомлений

Уведомления могут содержать блоки с директивами и подстановками:

#if channel_telegram
#telegram_parse_mode MarkdownV2
**Авария %var__desc%**: %var__alarm_action_name%

#if channel_interface
<b>Авария %var__desc%</b>: %var__alarm_action_name%

Основные подстановки для тревог:

  • %var__desc% — описание тревоги
  • %var__alarm_action_name% — событие (активация, нормализация и т.д.)
  • %var__node_pseudo_path% — имя узла
  • %var__value% — текущее значение переменной
  • %var__time_str% — время события

3. Каналы рассылки

Уведомления могут отправляться по нескольким каналам:

  • interface — панель уведомлений в интерфейсе Пульт.Онлайн
  • telegram — сообщения в Telegram
  • email — электронная почта
  • sms — SMS-сообщения
  • cmd — команды командной строки

4. Настройка в профиле пользователя

Каждый пользователь может настроить получение уведомлений:

  1. Откройте профиль пользователя (клик по логину в панели навигации)
  2. Укажите контактные данные (телефон для SMS, email и т.д.)
  3. Включите нужные каналы уведомлений
  4. Настройте типы сообщений для получения

Настройка групповых уведомлений

Для отправки уведомлений разным группам пользователей:

#if user_group_операторы
#telegram_parse_mode MarkdownV2
*Для операторов*: %var__desc% - %var__alarm_action_name%

#if user_group_инженеры
#telegram_parse_mode MarkdownV2
**Для инженеров**: %var__desc% (%var__node_pseudo_path%) - %var__alarm_action_name%
Значение: %var__value%

Расширенные возможности

1. Сводные тревоги

Сводная тревога принимает в качестве сигнала все тревоги узла, удовлетворяющие фильтрам. Перечисление переменных не требуется. Сводная тревога активируется при активации хотя бы одной из отслеживаемых тревог и нормализуется только при нормализации всех отслеживаемых тревог.

В качестве фильтров для отбора отслеживаемых тревог из всех тревог узла могут выступать теги и классы тревог.

ВНИМАНИЕ! Сводная тревога не отображается в списке тревог, но может быть использована как переменная на менмосхеме, в скриптах или в выражениях виртуальных переменных.

2. Динамические описания

Использование параметров узла в описаниях тревог:

Описание: "Высокая температура в %location%"

В параметрах узла задаем значение для location (например, "цех №1").

Структура значения тревожной переменной

Значение тревожной переменной представляет собой 4-битное число, где каждый бит кодирует определенный признак тревоги:

Биты (двоичное представление):  B3 B2 B1 B0
Десятичное значение:             8  4  2  1

Расшифровка битов:

B3 (значение 8) — Неквитированность

  • 1 — тревога неквитированная (требует подтверждения оператора)
  • 0 — тревога квитированная

B2 (значение 4) — Активность

  • 1 — тревога активная (условие срабатывания выполняется)
  • 0 — тревога неактивная

B1 и B0 (значения 2 и 1) — Класс тревоги Эти два бита кодируют класс тревоги:

B1 B0 Десятичное Класс тревоги
0 0 0 Оповещение
0 1 1 Предупреждение
1 0 2 Неисправность
1 1 3 Авария

Примеры значений

15 = 1111₂

  • Бит 3 (8): 1 — неквитированная
  • Бит 2 (4): 1 — активная
  • Бит 1 (2): 1 — старший бит класса
  • Бит 0 (1): 1 — младший бит класса
  • Расшифровка: Активная неквитированная авария (класс 3)

6 = 0110₂

  • Бит 3 (8): 0 — квитированная
  • Бит 2 (4): 1 — активная
  • Бит 1 (2): 1 — старший бит класса
  • Бит 0 (1): 0 — младший бит класса
  • Расшифровка: Активная неисправность (класс 2)

9 = 1001₂

  • Бит 3 (8): 1 — неквитированная
  • Бит 2 (4): 0 — неактивная
  • Бит 1 (2): 0 — старший бит класса
  • Бит 0 (1): 1 — младший бит класса
  • Расшифровка: Неактивное неквитированное предупреждение (класс 1)

4 = 0100₂

  • Бит 3 (8): 0 — квитированная
  • Бит 2 (4): 1 — активная
  • Бит 1 (2): 0 — старший бит класса
  • Бит 0 (1): 0 — младший бит класса
  • Расшифровка: Активное оповещение (класс 0)

0 = 0000₂

  • Расшифровка: Неактивная тревога, не требующая квитирования или заблокированная тревога (класс тревоги при таком статусе не кодируется и равен 0)

Использование значений тревог в математических выражениях

При использовании в математических выражениях (например, в выражениях виртуальных переменных, в скриптах или в полях контролов на мнемосхемах) доступны специальные функции для работы с тревогами:

// Примеры использования в выражениях
alarm_unack(A)      // Возвращает 1 если A неквитированная, иначе 0
alarm_active(A)     // Возвращает 1 если A активная, иначе 0
alarm_urgent(A)     // Возвращает 1 если A срочная (активная и неквитированная)
alarm_actual(A)     // Возвращает 1 если A актуальная (активная или неквитированная)
alarm_class(A)      // Возвращает код класса (3,2,1,0)
alarm_max_act(A1,A2,...,An)// Возвращает максимальное значение с приоритетом активности
alarm_max_unack(A1,A2,...,An)// Возвращает максимальное значение с приоритетом неквитированности

Примеры выражений

// Проверка на активную аварию
if(alarm_class($alarm1) == 3 && alarm_active($alarm1), 1, 0)

// Срочная тревога (активная и неквитированная)
if(alarm_urgent($alarm1), "ТРЕВОГА!", "Норма")

// Агрегация нескольких тревог
alarm_max_act($alarm1, $alarm2, $alarm3)

// Проверка класса тревоги
list(alarm_class($alarm1), 0, "Оповещение", 1, "Предупреждение", 2, "Неисправность", 3, "Авария")

В подстановках уведомлений

При использовании в шаблонах уведомлений доступны специальные подстановки:

%var__alarm_active%      // 1 если тревога активная
%var__alarm_unack%       // 1 если тревога неквитированная
%var__alarm_class%       // код класса тревоги (3,2,1,0)
%var__alarm_class_name%  // имя класса тревоги
%var__alarm_action%      // код события тревоги
%var__alarm_action_name% // имя события тревоги

Пример уведомления

#if channel_telegram
#telegram_parse_mode MarkdownV2
**%var__alarm_class_name%**: %var__desc%
Узел: %var__node_pseudo_path%
Значение: %var__value%
Статус: %var__alarm_action_name%

Практическое применение

1. Создание индикатора статуса

В виртуальной переменной можно создать агрегированный статус, указав следующее выражение:

// Создаем общий статус из нескольких тревог
alarm_max_act($temp_alarm, $pressure_alarm, $level_alarm)

2. Условное форматирование на мнемосхеме

// Цвет индикатора в зависимости от класса тревоги
{{ 
  if(alarm_class($node1.vars.alarm1) == 3, "red",
    if(alarm_class($node1.vars.alarm1) == 2, "orange",
      if(alarm_class($node1.vars.alarm1) == 1, "yellow", "green")
    )
  )
}}

Важные замечания

  1. Значение 0 может означать:
    • неактивную и не требующую квитирования тревогу
    • заблокированную тревогу
  2. Функции упрощают работу — используйте alarm_active(), alarm_class() вместо ручной битовой арифметики

Дополнительные ресурсы

  Email
   fdb_list
   fdb_load
   fdb_move
   fdb_paths
   node_list
   subscribe
   user_list
   user_save
   var_get
   var_list
   var_set